package com.um2.mauction.session.impl;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.um2.mauction.entity.Categorie;
import com.um2.mauction.entity.Produit;
import com.um2.mauction.entity.Vente;
import com.um2.mauction.session.remote.ProduitManagerRemote;

@Remote(ProduitManagerRemote.class)
@Stateless
public class ProduitManagerBean implements ProduitManagerRemote
{
	public static final String RemoteJNDIName = ProduitManagerBean.class.getSimpleName() + "/remote";

	@PersistenceContext
	private EntityManager em;
	
	/**
	 * Retourne un produit a partir de son identifiant
	 */
	public Produit getProduit(int idProduit) 
	{
		Produit cat = em.find(Produit.class,idProduit);
		return cat;
	}
	
	/**
	 * Ajoute un produit
	 */
	public void addProduit(String nomProduit,Categorie categorie)
	{
		Produit p =new Produit(nomProduit,categorie);
		em.persist(p);
	}
	
	public int addProduit(String nomProduit, String photoProduit,String descProduit, String etatProduit,Categorie catProduit,Vente v) 
	{
		Produit p = new Produit(nomProduit,photoProduit,descProduit,etatProduit,catProduit,v);
		em.persist(p);
		
		return p.getIdProduit();		
	}
	
	public int addProduit(Produit p)
	{
		em.persist(p);
		return p.getIdProduit();
	}
	
	/**
	 * Met a jour un produit
	 */
	public void updateProduit(int idProduit,String nomProduit) 
	{
		Produit cat = em.find(Produit.class,idProduit);
		cat.setNomProduit(nomProduit);
	}
	
	/**
	 * Supprime un produit
	 */
	public void deleteProduit(int idProduit) 
	{
		Produit cat = em.find(Produit.class,idProduit);
		em.remove(cat);
	}
	
	/**
	 * Retourne la liste de tous les produits
	 */
	@SuppressWarnings("unchecked")
	public List<Produit> getAllProduits() 
	{	
		Query query = em.createQuery( "SELECT p " +
									  "FROM Produit p ");		
		// Get produits
		List<Produit> produits = query.getResultList();
		return produits;
	}

	public void addCategoryToProduct(Produit p, Categorie c)
	{
		p.setCategorie(c);
		p.setNomProduit("plop");
		em.flush();
		//p.setCategorie(c);
		//em.merge(p);		
	}
	
	public void mergeProduit(Produit p)
	{
		em.merge(p);
	}
}